srmphp.blog.ir موسسه آموزش عالی مهراروند ساختمان داده مهندس سید رسول موسوی تهیه و تنظیم: الهام صباحی

Σχετικά έγγραφα
روش محاسبه ی توان منابع جریان و منابع ولتاژ

محاسبه ی برآیند بردارها به روش تحلیلی

جلسه ی ۱۰: الگوریتم مرتب سازی سریع

مفاهیم ولتاژ افت ولتاژ و اختالف پتانسیل

مثال( مساله الپالس در ناحیه داده شده را حل کنید. u(x,0)=f(x) f(x) حل: به کمک جداسازی متغیرها: ثابت = k. u(x,y)=x(x)y(y) X"Y=-XY" X" X" kx = 0

تصاویر استریوگرافی.

تحلیل مدار به روش جریان حلقه

1) { } 6) {, } {{, }} 2) {{ }} 7 ) { } 3) { } { } 8) { } 4) {{, }} 9) { } { }

فصل پنجم زبان های فارغ از متن

جلسه ی ۲۴: ماشین تورینگ

جلسه ی ۱۸: درهم سازی سرتاسری - درخت جست و جوی دودویی

سايت ويژه رياضيات درسنامه ها و جزوه هاي دروس رياضيات

جلسه ی ۴: تحلیل مجانبی الگوریتم ها

جلسه ی ۵: حل روابط بازگشتی

جلسه 9 1 مدل جعبه-سیاه یا جستاري. 2 الگوریتم جستجوي Grover 1.2 مسا له 2.2 مقدمات محاسبات کوانتمی (22671) ترم بهار

آزمایش 8: تقویت کننده عملیاتی 2

جلسه 3 ابتدا نکته اي در مورد عمل توابع بر روي ماتریس ها گفته می شود و در ادامه ي این جلسه اصول مکانیک کوانتمی بیان. d 1. i=0. i=0. λ 2 i v i v i.

تخمین با معیار مربع خطا: حالت صفر: X: مکان هواپیما بدون مشاهده X را تخمین بزنیم. بهترین تخمین مقداری است که متوسط مربع خطا مینیمم باشد:

آزمایش 1: پاسخ فرکانسی تقویتکننده امیتر مشترك

سلسله مزاتب سبان مقدمه فصل : زبان های فارغ از متن زبان های منظم

جلسه ی ۳: نزدیک ترین زوج نقاط

مدار معادل تونن و نورتن

يﺎﻫ ﻢﺘﻳرﻮﮕﻟا و ﺎﻫ ﺖﺧرد فاﺮﮔ ﻲﻤﺘﻳرﻮﮕﻟا ﻪﻳﺮﻈﻧ :سرد ﻲﺘﺸﻬﺑ ﺪﻴﻬﺷ هﺎﮕﺸﻧاد ﺮﺗﻮﻴﭙﻣﺎﻛ مﻮﻠﻋ هوﺮﮔ ﻪﻴﻟوا ﺞﻳﺎﺘﻧ و ﺎﻫﻒ ﻳﺮﻌﺗ

جلسه ی ۱۱: درخت دودویی هرم

هو الحق دانشکده ي مهندسی کامپیوتر جلسه هفتم

همبستگی و رگرسیون در این مبحث هدف بررسی وجود یک رابطه بین دو یا چند متغیر می باشد لذا هدف اصلی این است که آیا بین

فصل چهارم : مولتی ویبراتورهای ترانزیستوری مقدمه: فیدبک مثبت

دانشکده ی علوم ریاضی جلسه ی ۵: چند مثال

قاعده زنجیره ای برای مشتقات جزي ی (حالت اول) :

تمرینات درس ریاض عموم ٢. r(t) = (a cos t, b sin t), ٠ t ٢π. cos ٢ t sin tdt = ka۴. x = ١ ka ۴. m ٣ = ٢a. κds باشد. حاصل x٢

تمرین اول درس کامپایلر

آزمون مقایسه میانگین های دو جامعه )نمونه های بزرگ(

ﯽﺳﻮﻃ ﺮﯿﺼﻧ ﻪﺟاﻮﺧ ﯽﺘﻌﻨﺻ هﺎﮕﺸﻧاد

ویرایشسال 95 شیمیمعدنی تقارن رضافالحتی

شاخصهای پراکندگی دامنهی تغییرات:

فصل اول پیچیدگی زمانی و مرتبه اجرایی

دبیرستان غیر دولتی موحد

Top Down Parsing LL(1) Narges S. Bathaeian

بسم اهلل الرحمن الرحیم آزمایشگاه فیزیک )2( shimiomd

جلسه 12 به صورت دنباله اي از,0 1 نمایش داده شده اند در حین محاسبه ممکن است با خطا مواجه شده و یکی از بیت هاي آن. p 1

جلسه 22 1 نامساویهایی در مورد اثر ماتریس ها تي وري اطلاعات کوانتومی ترم پاییز

هندسه تحلیلی بردارها در فضای R

جلسه 2 1 فضاي برداري محاسبات کوانتمی (22671) ترم بهار

معادلهی مشخصه(کمکی) آن است. در اینجا سه وضعیت متفاوت برای ریشههای معادله مشخصه رخ میدهد:

فصل 5 :اصل گسترش و اعداد فازی

جلسه 14 را نیز تعریف کرد. عملگري که به دنبال آن هستیم باید ماتریس چگالی مربوط به یک توزیع را به ماتریس چگالی مربوط به توزیع حاشیه اي آن ببرد.

نظریه زبان ها و ماشین ها

مسائل. 2 = (20)2 (1.96) 2 (5) 2 = 61.5 بنابراین اندازه ی نمونه الزم باید حداقل 62=n باشد.

هر عملگرجبر رابطه ای روی يک يا دو رابطه به عنوان ورودی عمل کرده و يک رابطه جديد را به عنوان نتيجه توليد می کنند.

فهرست مطالب جزوه ی فصل اول مدارهای الکتریکی مفاهیم ولتاژ افت ولتاژ و اختالف پتانسیل تحلیل مدار به روش جریان حلقه... 22

6- روش های گرادیان مبنا< سر فصل مطالب

فعالیت = ) ( )10 6 ( 8 = )-4( 3 * )-5( 3 = ) ( ) ( )-36( = m n m+ m n. m m m. m n mn

جلسه 2 جهت تعریف یک فضاي برداري نیازمند یک میدان 2 هستیم. یک میدان مجموعه اي از اعداد یا اسکالر ها به همراه اعمال

تلفات خط انتقال ابررسی یک شبکة قدرت با 2 به شبکة شکل زیر توجه کنید. ژنراتور فرضیات شبکه: میباشد. تلفات خط انتقال با مربع توان انتقالی متناسب

تحلیل الگوریتم پیدا کردن ماکزیمم

Delaunay Triangulations محیا بهلولی پاییز 93

Angle Resolved Photoemission Spectroscopy (ARPES)

ندرک درگ ندرک درگ شور

نویسنده: محمدرضا تیموری محمد نصری مدرس: دکتر پرورش خالصۀ موضوع درس سیستم های مینیمم فاز: به نام خدا

Beta Coefficient نویسنده : محمد حق وردی

باشند و c عددی ثابت باشد آنگاه تابع های زیر نیز در a پیوسته اند. به شرطی که g(a) 0 f g

درخت. سید ناصر رضوی

فصل سوم جریان های الکتریکی و مدارهای جریان مستقیم جریان الکتریکی

تئوری جامع ماشین بخش سوم جهت سادگی بحث یک ماشین سنکرون دو قطبی از نوع قطب برجسته مطالعه میشود.

هد ف های هفته ششم: 1- اجسام متحرک و ساکن را از هم تشخیص دهد. 2- اندازه مسافت و جا به جایی اجسام متحرک را محاسبه و آن ها را مقایسه کند 3- تندی متوسط

آموزش SPSS مقدماتی و پیشرفته مدیریت آمار و فناوری اطالعات -

جزوه کارگاه برنامه نویسی

جلسه دوم سوم چهارم: مقدمه اي بر نظریه میدان

آشنایی با پدیده ماره (moiré)

عنوان: رمزگذاري جستجوپذیر متقارن پویا

1 دایره فصل او ل کاربردهای بسیاری داشته است. یک قضیۀ بنیادی در هندسه موسوم با محیط ثابت دایره دارای بیشترین مساحت است. این موضوع در طراحی

هدف از این آزمایش آشنایی با رفتار فرکانسی مدارهاي مرتبه اول نحوه تأثیر مقادیر عناصر در این رفتار مشاهده پاسخ دامنه

مقدمه -1-4 تحليلولتاژگرهمدارهاييبامنابعجريان 4-4- تحليلجريانمشبامنابعولتاژنابسته

مثلث بندی دلونی فصل 9 مژگان صالحی- دی 92 استاد راهنما: جناب آقای دکتر محمد فرشی

جلسه 15 1 اثر و اثر جزي ی نظریه ي اطلاعات کوانتومی 1 ترم پاي یز جدایی پذیر باشد یعنی:

فصل دهم: همبستگی و رگرسیون

فهرست جزوه ی فصل دوم مدارهای الکتریکی ( بردارها(

محاسبات کوانتمی 1 علم ساخت و استفاده از کامپیوتري است که بر پایه ي اصول مکانیک کوانتم قرار گرفته است.

:موس لصف یسدنه یاه لکش رد یلوط طباور

جلسه 28. فرض کنید که m نسخه مستقل یک حالت محض دلخواه

جلسه 16 نظریه اطلاعات کوانتمی 1 ترم پاییز

به نام خدا. الف( توضیح دهید چرا از این تکنیک استفاده میشود چرا تحلیل را روی کل سیگنال x[n] انجام نمیدهیم

اصول انتخاب موتور با مفاهیم بسیار ساده شروع و با نکات کاربردی به پایان می رسد که این خود به درک و همراهی خواننده کمک بسیاری می کند.

شبکه های عصبی در کنترل

فصل سوم : عناصر سوئیچ

بسم هللا الرحمن الرحیم

به نام خدا. Sparse Coding ستاره فرامرزپور

3 لصف یربج یاه ترابع و ایوگ یاه ناوت


فصل چهارم تعیین موقعیت و امتدادهای مبنا

فصل چهارم : مولتی ویبراتورهای ترانزیستوری مقدمه: فیدبک مثبت

Spacecraft thermal control handbook. Space mission analysis and design. Cubesat, Thermal control system

مود لصف یسدنه یاه لیدبت

دکتر عباس روحانی دانشکده کشاورزی دانشگاه صنعتی شاهرود

تعیین محل قرار گیری رله ها در شبکه های سلولی چندگانه تقسیم کد

فصل ششم: ترکیبات درس اول: شمارش اصل جمع و اصل ضرب فعالیت قیمه هویج سیب پرتقال قورمه «سورۀ نحل»

عوامل جلوگیری کننده از موازی سازی عبارتند از : 1.هزینه I/O 2.هماهنگی/رقابت

7- روش تقریب میانگین نمونه< سر فصل مطالب

یدنب هشوخ یاه متیروگلا

فصل دوم مثلثات نسبت های مثلثاتی دایره مثلثاتی روابط بین نسبتهای مثلثاتی

Transcript:

موسسه آموزش عالی مهراروند ساختمان داده استاد: مهندس سید رسول موسوی تهیه و تنظیم: الهام صباحی 1

زندگی یعنی تکاپو زندگی یعنی هیاهو زندگی یعنی شب نو روز نو اندیشه نو زندگی یعنی غم نو حسرت نو پیشه ی نو زندگی بایست سرشار از تکان و تازگی باشد زندگی بایست در پیچ و خم راهش ز الوان حوادث رنگ بپذیرد زندگی بایست یکدم یک نفس حتی زجنبش وانماند گرچه این جنبش برای مقصدی بیهوده باشد هوشنگ شفا فصل اول : پیچیدگی زمانی فصل دوم : آرایه فصل سوم : درخت فصل چهارم : گراف فصل پنجم : مرتب سازی 2

فصل اول : پیچیدگی زمانی الگوریتم' ' algorithm مجموعه دستورالعمل هایی که برای رسیدن به یک هدف خاص ارائه می شود. بهههه بیهههان دیگهههر مجموعه ههه ای متنهههاهی از دسهههتور العمهههل هه ههایی اسهههت کهههه بهههه ترتیه ههب خاصی اجرا می شوند و مسئله را حل می کنند و لزوما منحصر به فرد نیستند. یک الگوریتم روشی گام به گام برای حل یک مسئله است. تمام الگوریتم ها باید شرایط و معیار های زیر را دارا باشند: ورودی : یک الگوریتم می تواند هیچ یا چندیدن پارامتر را به عنوان ورودی بپذیرد. خروجی : یک الگوریتم باید حداقل یک کمیت را به عنوان خروجی "نتیجه عملیات" تولید کند. قطعیت : دستور های الگوریتم باید با زبانی دقیق و بدون ابهام بیان شود.) در اجرای آن هیچ ابهامی نباشد ) هر دستورالعمل نیز باید انجام پذیر باشد. خاتمه پذیر باشد : الگوریتم باید دارای شروع و پایان مشخصی باشد به نحوی که اگر دستورهای آن را دنبال کنیم پس از طی مراحلی که قابل شمارش و متناهی باشد خاتمه یابد. الزم به ذکر است مدت زمان الزم برای خاتمه یک الگوریتم باید به گونهای معقول و کوتاه باشد. کارایی داشته باشد.) قابل تحلیل باشد.( ' پیچیدگی زمانی ' order 1- زمان مرتبه اجرایی مهم ترین معیار های انتخاب یک الگوریتم - 2 حافظه )در بحث ذخیره و بازیابی حائز اهمیت است(. 3

پیچیدگی زمانی ' order 'قطعه کد زیر را مشخص کنید. زمان اجرا قطعه کد { 0 int x=y 0 x=10 1 y 1 1 } 0 2 پیچیدگی زمانی' o ( 2 ) = ' o زمانی n order می شود که حلقه for بازگشتی باشد. کران پایین" کف " کران باال " سقف " مجموعه از اجتماع چند عنصر هم نوع مجموعه به وجود می آید. عملگر % مضرب ها نام باقیمانده تقسیم' mod ' مثال X % y نمایش مضارب اعداد طبیعی n به فرم زیر است 4

نمایش مضارب عدد : 2 فاکتوریل ' ǃ ' هر عدد طبیعی از حاصل ضرب آن عدد در تمام اعداد صحیح و مثبت ( اعداد طبیعی ) کوچکتر از آن به دست می آید. 3 ǃ = 3 * 2 * 1 جایگشت نحوهی قرارگیری عناصر یک مجموعه با نظم و ترتیب خاص در کنار هم را جایگشت گویند. به بیان دیگر مرتب سازی یا تغییر ترتیب اعضای یک مجموعه را جایگشت گویند. فرض کنید مجموعه M={a,b,c} باشد. جایگشت این مجموعه بصورت زیر خواهد بود M={a,b,c} abc, acb, bac, bca, cab, cba, لگاریتم logarithm الگوریتم یک عدد در یک پایه برابر با توانی از پایه است که آن عدد را می دهد. مثال لگاریتم عدد 1111 در پایه 11 برابر 3 خواهد بود. Log 10 (1000) = 3 1000 = 10 10 10 می توان نتیجه گرفت لگاریتم برعکس توان است. 5

log X n " log 0 n و اعداد منفی " لگاریتم عدد صفر " تعریف نشده است. "در هر مبنایی که باشند حاصلی برایشان قضیه 1 فرمول جمع مقادیر بصورت زیر خواهد بود ساختار تکرار دستور For 'دستورات شرطی' ساختارهای تکرار تحت شرایط خاصی یک یا چند دستور را چندین بار اجرا می کنند. گام افزایش step مقدارنهایی to مقدار اولیه = شمارنده For مجموعه دستورات { } : for روند عملکرد حلقه شرط For i در صورت برقهراری شرط شمارنده دستورات پیچیدگی زمانی در الگوریتم رفتار الگوریتم را در زمان اجرا با مجموعهای از ورودیهای منتخب توصیف میکند. 6

پهیچیدگی زمانی قطعه کدهای زیر را بیابید. حلقه : for پاسخ دقیق زمان اجرا o ( n ) : پیچیدگی زمانی ' order ' حلقه for تو در تو : o ( n 2 ) : پیچیدگی زمانی ' order ' قضیه 2 فرض کنید دارای یک حلقه for و یک سری دستورات هستیم تعداد تکرار حلقه for برابر است با تعدا تکرار دستورات درون حلقه. یک + کران پایین کران باال N m + 1 Example : for i m to n 7

قضیه 3 f(x) = a mn m + a m-1 n m-1 +.+ a 2 باشد آنگاه n 2 + a n 1 + a 0 n 0 اگر تابع ( f(xبصورت 1 o ( n خواهد بود. m مرتبه اجرایی آن ) اگر حلقه های for تو در تو باشند در یکدیگر ضرب می شوند. واگر بصورت مجذا از هم باشند با یکدیگر جمع می شوند. مرتبه اجرایی هریک از شبه کد های زیر را بنویسید. For i=1 to n n+1 مثال 1 : { تابع مرتبه اجرایی 2n+1 X+=1; n 1 = n } For j=1 to m m+1 { ;2=+Y m 1+2m تابع مرتبه اجرایی } o ( n + m ) : پیچیدگی زمانی ' order ' مثال 2 : For i=1 to m m + 1 { For o=1 to n m ( n+1 )= mn + 1 { Y+=3; m n = mn تابع مرتبه اجرایی + 1 2m } 2mn + { 8

o ( mn ) : پیچیدگی زمانی ' order ' مثال : 3 For i L to 1 n + 1 { X = X + I ; n } 2n + 1 پیچیدگی زمانی' o ( 2n + 1 ) : ' order حلقه for همیشه یکی بیشتر از خودش اجرا می شود. ( هدف برسی شرط حلقه ) مثال : 4 فرمول + 2 n For i 5 to m m { m 5 + 2 = m 3 For j 7 to n یک واحد کاهش می یابد { m 2 (n 7+ 2) A [ i, j ]=a [ i, j ] * b [ i, j ] m 2n + 10 } m 2 ( n 4 ) m 2n + 8 } m 3 m 2n +10 m 2n + 8 3m 4n +15 پیچیدگی زمانی' o ( m ) : ' order 9

برای عبارت زیر شبه کد های برنامه نویسی بنویسید. پاسخ For i 1 to n n + 1 { X= x+ [ ( i ˆ 2) +( 2 ˆ i ) ] 1 n } 2n + 1 در این مثال متغییر x حاصل جمع های متوالی را در خود ذخیره می کند. پیچیدگی زمانی' o ( n ) : ' order حلقه while این دستور تا زمانی که شرط برقرار باشد دستورات را اجرا می کند و شرط قبل از اجرای دستورات چک می شود.بدین معنا که اگر در وسط اجرای دستورات متغییرها طوری تغییر کنند که شرط برقرار نباشد دستورات همچنان تا پایان اجرا می شوند. ) شرط یا شرایط ( while { دستوراتی که می خواهیم تکرار شوند } بیشتر بدانید! بهترین راه برای حل کردن حلقه های شرطی آن است که گرفته و بر اساس محدودیت مد نظر حلقه را حل کرد. برای آن ها یک محدودیت ( مثال :یک عدد (در نظر = 1, 2, 4, 8, 16 i در نظر بگیریم مرتبه اجرایی حلقه زیر را بیابید. اگر = 16 n را و i 11

I = 1 While ( I < n ) { X = x + 1 ; i = i 2 ; } Analysis I شهرط مرتبه اجرایی 1 1 < 16 * 2 2 < 16 * 4 4 < 16 * 8 8 < 16 * 16 16 < 16 2 4 =11, 11 4 پیچیدگی زمانی' o ( log 2 n ) : ' order قضیه 4 هرگاه در حلقه ای مانند while: شمارنده یا شرط حلقه در عددی ضرب و یا بر عددی تقسیم شود مرتبه اجرایی آن الگوریتم ( حلقه ) لگاریتم انتهایی حلقه ( شرط اتمام حلقه ) در مبنای عدد ضرب شده یا تقسیم شده در شمارنده می باشد. شرط O ( log 2 n ) مبنا )عدد ضرب شده در شمارنده حلقه( n ( n+1 ) 10 Formula : i=1 i 2 = 1 + 2 + 3 + + 10 11

تعداد تکرار دستور ستاره دار چند مرتبه است n ( n + 1 ) 2 = n2 + n 2 پیچیدگی زمانی' o ( n 2 ) : ' order توابع یکی از نماهایی که در آنالیز کردن استفاده می کنیم تابع است. - 1 توابع بازگشتی به توابعی که بر اساس شرایطی که دارند مجددا خود را فراخوانی می کنند گفته می شود. نحوه ی تعریف این توابع به فرم زیر است : ) y ( example f ( x, ورودی ها ) نام تابع {.. } 12

ویژگی توابع بازگشتی : 1- از معایب توابع بازگشتی این است که در نهایت سادگی حجم زیادی را اشغال کرده و نسبتا کند عمل می کنند و نیز در زمان پردازش cpu را درگیر می کنند. 2- خود را فراخوانی می کنند.) تعداد دفعاتی که خود را فراخوانی می کند باید محدود باشد.بدیهی است که در غیر این صورت اجرای آن خاتمه نمی یابد.( 3- دارای شرط خاتمه می باشد. Sig ( n ) n+1 { If ( n <=1 ) n+1 Return 1; n+1 Else n + sig ( n + 1 ); n.n=n 2 } مرتبه اجرایی + 3 2 3n + n مرتب شده +3 3n n 2 + ' order oپیچیدگی ( n 2 ) : ' زمانی آنالیز توابع بازگشتی از آنجایی که در توابع بازگشتی توابع خود را فراخوانی برای و کرده انتقال جواب از روش پشته استفاده می کنند فلذا تنها راه پیاده سازی پشته درخت است. مثال: 13

عدد 1 به تابع فرستاده می شود. : توضیح فراخوانی n+(7) ' return 1 ' آیا 1<7 است خیر. فلذا خط اجرا نمی شود. در غیر این صورت عدد مجدد تابع) عدد انتزاعی( مجددا تابع فراخوانی می شود برای عدد 1.شرط برسی می شود.آیا 1<1 خیر. فلذا خط ' return 1 'اجرا نمی شود. در غیر این صورت عدد (6)+n فراخوانی مجدد تابع) عدد انتزاعی( مراحل فوق را تا زمانی تکرار می کنیم که شرط نقض شود ( 1=>n ) باشد و عدد 1 را return کند. تعداد مربع های یک صفحه ی شطرنجی 11 11 چقدر است پاسخ : 14

توابع بازگشتی زیر چه عملی را انجام می دهند مرتبه اجرایی آن را بنویسید. o ( n ) : ' order ' در مثال فوق تابع بازگشتی بصورت پشته عمل کرده و هر بار خودش را فراخوانی می کند. جواب این توابع همواره به مرحله قبل وابسته بوده تا زمانی که به خروجی پایانی برسد. 15

اعداد ثابت هیچ تاثیری در مرتبه اجرایی ندارند.) + و و / و ) χ هر عالمتی می تواند جایگزین شود) + و و / و ) χ مرتبه اجرایی O ( n ) O ( n ) 2 O ( n ) 3 O ( n ) m تابع N + f ( n 1 ) N + f ( n 2 ) N + f ( n 3 )... N + f ( n m ) مرتبه اجرایی تابع N + f ( n log 2 n ) 2 N + f ( n ) log 3 n 3... N + f ( n m ) N + f ( n 2 ) + f ( n 2 ) log m n مرتبه اجرایی o ( 2 n) O (2 n 2) O (2 m) n تابع N + f ( n - 1) + f ( n 1 ) N + f ( n - 2 ) + f ( n 2 )... N + f ( n m ) + f ( n m ) N + f ( n 1 ) + f ( n 2 ) مثال: o ( 2 n+ n 2 ) : ' order ' 16

مرتبه اجرایی تابع N + f ( n 2 ) + f ( n 2 ) N + f ( n - 1 ) + f ( n 1 ) + f ( n 1 ) o ( 2 n) 3 n مرتبه اجرایی الگوریتم زیر چیست F ( n ) If ( n <= 1 ) return 1; Else Return f ( n 2 ) * f ( n 2 ); o ( 2 n 2 ) : ' order ' خروجی الگوریتم زیر به ازای عدد 111 چیست فرمول ریاضی آن را بنویسید. f ( n ) if ( n < = 1 ) return 1; else return n + f ( n 1 ); n ( n+1 ) = 2 100 ( 101 ) 2 = 5.050 خروجی تابع زیر به ازای ورودی عدد 3 چیست مرتبه اجرایی آن را بدست آورید. f ( y ) if ( y > 0 ) return f ( y 1 ) + f ( y 2 ); else return 2; 17

n + n 2 = 2n 2 + n 2 = 3n 2 حال به ازای ورودی 3 خروجی بصورت زیر خواهد بود شرط برسی می شود آیا 3=y < 0 است بله فلذا یکبار 1-y و یکبار 2-y درصورتی که حاصل بزرگتر از نبود بجای آن عدد 2 را قرار میدهیم. خروجی پایانی ( 2 n+ n 2 ) = ( 2 n ) order o خروجی تابع زیر به ازای ورودی های 2 و 4 چیست Bino ( n, m ) If ( n=0 OR n = m ) Return 1 ; Else Return bino ( n 1, m ) + bino ( n - 1, m - 1 ) توضیح: گام : 1 آیا 0=n خیر آیا n = m خیر. فلذا یک واحد از n کم می شود ولی m با مقدار قبل باقی می ماند. + یک واحد از m و یک واحد از n کم می شود. 0=n نبوده و n=m نمی باشد فلذا 1-n و m با مقدار قبل باقی می ماند. گام : 2 گام 0=n : 3 نبوده امها n=m می باشد فلذا بجای آن عدد 1 را قرار می دهیم. در قسمت راست درخت 0=n نبوده و n=m نمی باشد. فلذا الزم است مراحل فوق مجددا تکرار شود تا به خروجی مناسب برسیم. 18

تابع اکرمن یک تابع بازگشتی است که یک رایانه یا پردازشگر با حافظه بیکران میتواند آن را محاسبه کند. اگر به عدد دوم تابع آکرمن دو واحد اضافه کنیم حاصل نهایی بدست می آید. شرط پذیرفتن تابع آکرمن : در صورتی یک تابع را به عنوان تابع اکرمن در نظر می گیریم که عدد اول یک و عدد دوم x باشد. خروجی تابع بازگشتی زیر چیست اگر = 0 mباشد گر = 0 nباشد اگر > 0 n m, باشد یک واحد به n اضافه کن. رابطه بازگشتی را به f باز گردان. رابطه را به تابع باز گردان. روش حل: گام : 1 آیا 0=m است خیر. آیا 0=n است خیر. آیا > 0 m,n هستند بله فلذا حاصل 1-m را به عنوان خانه اول در نظر می گیریم. )) n-1, f ( 1, 2 ) ) ( m-1, f ( m, 0 ( ) گام : 2 مجددا یک تابع بازگشتی ایجاد می شود. 19

آیا m=0 است خیر. آیا n=0 است خیر. آیا > 0 m,n هستند بله )) n-1 ( m-1, f ( m,. گام : 3 مجددا یک تابع بازگشتی ایجاد می شود. آیا m=0 است خیر. آیا n=0 است خیر. آیا > 0 m,n هستند بله ) ) 0 ( 1, f F ( 0, گام : 4 مجددا یک تابع بازگشتی ایجاد می شود. f ( 0, 1 ) را برابر 1 قرار میدهیم. n و m-1 گام : 5 مجددا یک تابع بازگشتی ایجاد می شود. آیا 0=m است بله. یک واحد به n اضافه کرده و به تابع قبل باز گردان. شرط : هر گاه 0=m باشد 1+n می شود. o ( n 2 ) : ' order ' خروجهی تابع بازگشتی زیر به ازای ورودی عدد 1 چقدر خواهد بود روش حل: گام 1: آیا 0=n هست خیر. آیا 1=n هست خیر. آیا 2<n هست بله. فلذا به دو تابع جمع 1-n و 2-n تقسیم می شود. F(6) 1 = f(5), f(6) 2 = f(4) گام : 2 آیا 0=n هست خیر. آیا 1=n هست خیر. آیا 2<n هست بله. فلذا به دو تابع جمع 1-n و n-2 تقسیم می شود. F(5) 1 = f(4), f(5) 2 = f(3) گام : 3 حال (4) f را در نظر می گیریم. آیا 0=n هست خیر. آیا 1=n هست خیر. آیا 2<n هست بله. فلذا به دو تابع جمع 1-n و 2-n تقسیم می شود. F(4) 1 = f(3), f(4) 2 = f(2) گام : 4 حال (3) f را در نظر می گیریم و شرایط فوق را چک می کنیم. F(3) 1 = f(2), f(3) 2 = f(1) 21

: 5 حال (2) f را در نظر می گیریم و شرایط فوق را چک می کنیم. F(2) 1 = f(1), f(2) 2 = f(0) گام تابع فوق از روش فیبوناچی می باشد. اعداد فیبوناچی نمونه اولیه ای از یک رابطه بازگشتی همگن با ضرائب ثابت می باشد. F n = f n-1 + f n-2 بیشتر بدانید...!! به توالی اعداد فیبوناچی می رسیم که به شکل: ۸۸ 55 34 21 13 ۸ 5 3 2 1 1 1 و...است. بد ترین ' o ' در ادامه مباحث فوق پیچیدگی زمانی دارای سه حالت متوسط یا دقیق' ' θ بهترین ' Ω ' می باشد. اجرا زمان های اجرای یک الگوریتم به ترتیب از بهترین تا بدترین حالت ممکن: O ( 1 ) < O ( log n ) < O ( n ) < O ( n log n ) < O ( n 2 ) < O ( n 3 ) <...< O ( 2 n ) < O ( n ǃ ) < O ( n n ) فرض کنید دارای یک تابع با پیچیدگی زمانی n هستیم بد ترین حالت ' big-o 'تابع بصورت ) 1 o ( n log n ), o ( n 2 ),, o ( n می باشد. 21

) n θ = o ( می باشد. ) n Ω = ( o ) log (n), o ( 1 ), o ( می باشد. حالت متوسط تابع بصورت بهترین حالت ' Ω ' بصورت اگر یک تابع داشته باشیم برای محاسبه ی بدترین حالت پیچیدگی زمانی آن تابع رابطه زیر صادق است: F ( n ) = o ( g(n) ) c, n0 > o : n n0 f (n c g(n)) θ = o ( n log n ), o ( n 2 ) o ( n n ), o ( n ) اومگا ' Ω ' f ( n ) = Ω = log (n), o ( 1 ), o ( n ) اومگا مگا به معنی بزرگ است. F ( n ) = Ω ( g(n) ) c, n0 > o : n n0 f (n) c g (n) حالت ' θ ' حالت متوسط " دقیق " f ( n ) = Ω = log (n), o ( 1 ), o ( n ) F (n) = Ω (g(n)) c, n0 > o : n n0 f (n) c (g(n)) Ω (g(n)) o(g(n)) اشتراک اومگا و Big-o Ω ( g (n) ) o (g (n) ) نتیجه میگیریم : پیچیدگی زمانی big-o همواره باید بزرگتر یا مساوی خود تابع اصلی باشد. کدام یک از تساوی های زیر درست است 22

) 3 5 n 2 6 n = o ( n )الف o ( n 2 ) = o ( n 3 ) بد ترین حالت برای یک تابع باید اعداد بزرگتر همراه با خود پیچیدگی زمانی باشد. ) 3 5 n 2 6n = θ ( n )ب χ o ( n 2 ) θ ( n 3 ) در حالت میانگین تتا باید مساوی درجه تابع باشد. ) 3 5 n 2 6n = Ω ( n )ج χ o ( n 2 ) Ω ( n 3 ) بهترین حالت برای یک تابع باید اعداد کوچکتر همراه با خود پیچیدگی زمانی باشد. فصل دوم : آرایه آرایه تعدادی متغیر از یک نوع داده و تحت یک نام میباشد. هر یک از متغیرهای درون آرایه با یک شماره که به آن»اندیس«میگوییم از یکدیگر متمایز میشوند. متغیرهای درون آرایه را»عناصر آرایه«مینامند که همگی قابلیت نگهداری فقط یک نوع داده را دارند. عناصر درون آرایه از نظر فیزیکی مکانهای متوالی در حافظه اصلی میکنند. بنا بر این تعداد عناصر درون آرایه محدود و ثابت میباشد. رایانه را اشغال خانههای آرایه توسط اندیس مشخص می شوند که یک عدد صحیح است مثال خانه شماره 5 یعنی خانه ای که اندیساش 5 است. هر آرایه ای یک اندیس شروع و یک اندیس پایان دارد که شماره های مغتبر اندیس بین این دو خواهند بود. L1 اندیس شروع آرایه است و L اختصاری Low یعنی پایین است. مثال اگر L1 برابر 4 باشد اولین اندیس آرایه 4 است. U1 اندیس باال آرایه است و U اختصاری Up یعنی باال است. مقدار U1 همیشه مساوی با بزرگتر از L1 است.اگر اندیس شروع یک آرایه )L1( برابر 1 و اندیس پایان آرایه )U1( برابر با 5 باشد اندیس های معتبر آرایه مقادیر 1 و 2 و 3 و 4 و 5 خواهند بود. تعداد عناصر آرایه برابر است با 5 خانه که از فرمول زیر محاسبه می شود: U1 - L1 + 1 23

example 5-1 +1 = 5 برای دسترسی به یک خانه از آرایه از شماره اندیس آن استفاده می کنیم. A [ 3 ] شماره اندیس نام آرایه سادگی در استفاده مزایای استفاده از آرایه دسترسی مستقیم به خانه ها ایستا بودن و محدود بودن )الزاما تعداد خانه ها باید مشخص باشد( معایب استفاده از آرایه به جزء حذف و اضافه کردن به انتهای آرایه و برای حذف و اضافه کردن به وسط آرایه نیاز به Shift است. درج کردن در آرایه برای درج کردن متحوی در یک آرایه از فرمول های زیر استفاده می کنیم : نوع عمل فرمول K = 1... N محل عملیات N K + 1 n + 1 2 تعداد Shift مورد نیاز متوسط تعداد Shift o ( n ) : ' order ' 24

0 1 2 3 4 5 6 5 6 7 8 3 9 مثال : 1 + 4 7 آرایه از کردن حذف برای حذف کردن متحوی در یک آرایه از فرمول های زیر استفاده می کنیم : نوع عمل فرمول K = 1... N محل عملیات N K n 1 2 تعداد Shift مورد نیاز متوسط تعداد Shift بیشتر بدانید...! ǃ برای دسترسی تصادفی به یک خانه از حافظه یک واحد زمان الزم است. برای اضافه کردن ' append 'یک مقدار به انتهای یک آرایه مرتب یک واحد زمان الزم است. ) 1 ( o برای حذف کردن یک مقدار از آرایه یک واحد زمان الزم است. ) 1 ( o فضای اشغال شده توسط یک تابع = تعداد عناصر آرایه χ اندازه نوع داده جدول انواع عددی و میزان فضای اشغال شده در خافظه به فرم زیر است نوع میزان حافظه ( بایت ) 1 2 Byte Integer 25

4 4 8 8 Long Single Double Currency '$ ' حاالت یک آرایه سه بعدی بصورت زیر است A [ L I.. U I, L j.. U j, L k.. U k ] کنیم. آدرس شروع آرایه را با α و اندازه هر خانه ( تعداد بایت ) آرایه را با β مشخص می 1- سطری ( از ابتدا به انتها( سیستم ها به دو صورت آرایه ها را پیمایش می کنند : 2- ستونی 1- پیمایش سطری : A (i,j,k) = [ (i-l1) (U2 - L2 +1) ( U3 - L3 +1) + (J - L2) (U3 - L3 +1) + ( K - L3) ] χ β+α آرایه ی سه بعدی ] 10:25 5:5-,, 1:15 [ A را برای ذخیره اعداد به طول 2 بایت بکار گرفته شده است. اگر آرایه به صورت سطری از خانه 2000 حافظه ذخیره شده باشد آدرس عنصر ] 15 [ 2, 5, A چقدر است α = 2000, β = 2 [ ( 2-1 ) ( 5 - (-5) +1 ) ( 25-10+1 ) ( 5-5 ) ( 25-10 ) ( 15-10 ) ] χ 2+2000=??????? 26

استاندارد یک آرایه سه بعدی به فرم زیر است : بعد سوم پنج تایی بعد دوم چهار تایی بعد اول سه تایی بیشتر بدانید...! i زبان های برنامه نویسی امروزه شماره خانه های یک آرایه را یا از صفر شروع می کنند یا از یک. در زبان های برنامه نویسی گذشته این قابلیت را داشتیم که آدرس شروع و انتهای آرایه را خودمان تعیین کنیم. به همین علت کران پایین و باالی آرایه ها را مشخص می کردیم. A [ L 1.. U 1, L 2.. U 2, L 3.. U 3 ] کران پایین و باال بعد سوم کران پایین و باال بعد دوم کران پایین و باال بعد اول پیدا کردن آدرس یک خانه در حافظه بصورت پیمایش ستونی : -2 پیمایش یک آرایه ستونی از راست به چپ صورت می گیرد. A [ i, j, k ] تعیین جهت پیمایش [ ( K-L3 ) ( U2-L2+1 ) ( U1-L1+1 ) ( J-L2 ) ( U1-L1+1 ) ( i-l1 ) ] χ β + α آرایه دو بعدی ] 33.. 3. 5,. -5 [ X در آدرس 400 به بعد حافظه ذخیره شده است. و هر خانه از آرایه احتیاج به 4 بایت دارد.آدرس [10 4], X به روش ستونی چقدر خواهد بود β = 4 27

α = 400 X [ 4, 10 ] i j در جستجوی یک آرایه به روش ستونی برای تعیین کردن شماره خانه از فرمول زیر استفاده می شود: حذف α 1+β, در آرایه ی 'a'..'e'..,1..4] A [ شماره ی درایه ی[ '3', 'b' A [ چند است I j L1..u1 L2..u2 ماتریس آرایه های دو بعدی m χ n بوده که m تعداد سطر ها و n تعداد ستون ها می باشد. 28

قطر اصلی : یکی از ویژگی ماتریس ها قطر اصلی بوده که دارای شماره سطر و ستون یکسان می باشند. قطر فرعی :در قطر فرعی خانه ها برعکس یکدیگر می باشند. رابطه قطر اصلی i = j می باشد. قطر فرعی قطر اصلی ماتریس باال مثلثی و ماتریس پایین مثلثی ماتریسی که کلیه اعضای زیر قطر اصلی آن صفر باشد را ماتریس باال مثلثی و ماتریسی که کلیه اعضای باالی قطر اصلی آن صفر باشد را ماتریس پایین مثلثی گویند. ماتریس باال مثلثی ماتریس پایین مثلثی 29

بیشتر بدانید...! نکاتی درمورد ماتریس باال مثلثی و پایین مثلثی : تعداد کل خانه های یک ماتریس n می باشد. 2 تعداد خانه های مخالف صفر می باشد. N ( N+1 ) 2 تعداد خانه های صفر می باشد. N ( N 1 ) 2 ماتریس های L قطری در ماتریس هایی که در آن L قطر که قطر اصلی نیز شامل آن است مخالف صفر باشد L قطری گویند. ماتریس سه قطری خانه های مخالف صفر را گویند که با فرمول 2-3n نشان داده می شود. محاسبه خانه های مخالف صفر در ماتریس L قطری: nl - L2 1 4 = nl ضرب ماتریس ها ماتریس ها را می توان در یکدیگر ضرب کرد مشروط بر اینکه تعداد ستونهای ماتریس اول با تعداد سطرهای ماتریس دوم برابر باشد. 31

Sparse Matrix ماتریس خلوت (تنک یا کم پشت( یا 'ماتریس اسپارس 'ماتریسی است که اکثر عناصر آن صفر باشد. خالصه شده ماتریس اسپارس: برای خالصه کردن این ماتریس ها از آرایه دوبعدی استفاده می کنیم. تعداد خانه های غیرخالی تعداد ستون ها تعداد سطر ها 0 0 0 0 0 5 0 2 0 0 0 4 3 0 0 0 4 سطر کنترلی 2 4 2 4 5 2 4 2 3 4 4 4 1 3 5 χ 3 خالصه شده ماتریس اسپارس همیشه نسبت به ماتریس اصلی یک سطر اضافه تر دارد.)سطرکنترلی( تعداد خانه های غیر خالی + یک سطر کنترلی 31

بیشتر بدانید...! حاصل جمع تفریق و ضرب دو ماتریس اسپارس الزاما" اسپارس نخواهد بود. سطری که در آن صفر باشد را حذف کرده و ماتریس را مرتب می کنیم. مثال: 1 0 0 1 0 0 1 0 0 χ 1 0 0 1 1 1 1 0 0 = 1 1 1 1 0 0 1 1 1 حاصل این ماتریس اسپارس نخواهد بود. جمع ماتریس Sparce در جمع ماتریس ها خانه ها نظیر به نظیر با هم جمع می شوند. مرتب شده در ضرب ماتریس ها خاصیت جا به جایی وجود ندارد. A χ B B χ A 32

در جمع ماتریس ها خاصیت جا به جایی وجود دارد. A + B = B + A ترانهاده [ M t, M 1 ] Sparse Matrix مرتب شده شبه کد ترانهاده کردن ماتریس دوبعدی : For j 1 to m For i 1 n Print A [ j ] [ i ] یها For i 1 to m For j 1 n Print A [ i ] [ j ] پشته یا stack پشته لیست خطی است كه عملیات حذف و اضافه تنها از يك طرف آن به نام Top صورت می گیرد. در هر لحظه فقط عنصر باالئی پشته قابل دسترس است. آخرين عنصری که به پشته اضافه می شود اولین عنصری است که از آن حذف می شود. يعنی عناصر عکس ترتیب ورود از پشته خارج می شود به همین دلیل پشته يک ساختمان داده last )محسوب in first out) LIFO می شود. می توان پشته را ساختمان داده first )هم in last out) FILO نامید زيرا اولین داده ای که در پشته ذخیره می شود آخرين داده ای است که خارج می شود. 33

در مبحث پشته کلمات کلیدی زیر وجود دارد : : Push عمل اضافه کردن عنصر جديدی در پشته : عمل حذف عنصری از پشته Pop : Top آخرین عنصر پشته را مشخص می کند ( Top = n پشته پر است ) TOPمی تواند دارای دو مقدار باشد = 0 Top ( پشته خالی است ) بهینه کردن ضرب ماتریس ها : 1- روش معمولی : برای بهینه کردن ضرب ماتریس ها همواره ماتریس هایی را انتخاب می کنیم که اعداد داخلی آن ها بزرگتر باشد. A 30 χ 1 B 1 X 40 C 40 X 10 D 10 X 25 P1 P2 P3 ( 30 χ 40 χ 1 ) + ( 30 χ 10 χ 40 ) + ( 30 χ 10 χ 25 )=20.700 34

2- حالت بهینه : برای ماتریس بهینه اولویت با اعداد بزرگتر است. A 30 χ 1 B 1 X 40 C 40 X 10 D 10 X 25 ( 1 χ 10 χ 40 ) + ( 1 χ 25 χ 10 ) + ( 30 χ 25 χ 1 )=14000 زمانی که برای بهینه کردن ماتریس ها اولویت قرار می دهند حق جا به جایی نداریم. چراکه در ضرب ماتریس ها جا به جایی نداریم. شبه کد اضافه کردن مقداری به پشته ' push ' : Array s [ 0 n] Int Push ( void x ) Top = 0 n { Top = 0; If top==0 If top==n 'stack is empty ' 'stack is full ' If ( top ==n ) Stack is full Else S [ ++ top ] = x شبه کد حذف کردن مقداری از پشته ' pop ' : Array s [ 0 n] Int pop ( ) { If (top==0 ) 'stack is empty ' Else X = s [ top - - ] 35

1 یک stack با حد اکثر تعداد خانه های موجود است. در هر خانه اندیس آن خانه ذخیره شده است. این پشته باهر بار pop کردن سر و ته می شود. آخرین عنصری که pop می شود چیست آخرین عنصر فرض کنید به یک 1 خانه stack اختصاص داده ایم.در ابتدا stack خالی است. الف خروجی برنامه زیر چیست ب حد اکثر تعداد خانه هایی که برا ی کد زیر نیاز است چقدر است تعداد خانه های مورد نیاز 4 است. 36

عبارت ) ) ] n { x + ( y [a+b] * c [ (d + e) ] ) } / ( j ( k [ L را درنظر کروشه بگیرید.می خواهیم با استفاده از یک پشته بررسی که آیا کنیم پرانتزها و ها آکوالدها به درستی تطبیق می شوند یا خیر پشته موردنظر حد اقل باید گنجایش چند عنصر را داشته باشد پشته حد اکثر باید دارای 4 خانه باشد. ورودی A, B, C, D, E, F به یک پشته را در نظر بگیرید. کدام یک از پشته های زیر مجاز است ج ب الف ارزشیابی عبارت های محاسباتی عملگر های محاسباتی اعمال محاسباتی را روی عملوند ها انجام می دهند. a + b عملگر عملوند 37

ترتیب اولویت عملگر ها: عملگر ) ( + و - ˆ * و / + و - Mod نام پرانتز مثبت و منفی توان ضرب و تقسیم جمع و منها باقیمانده A + B + C + D جهمع : A ˆ B ˆ C ˆ D تههههوان : 1 2 3 3 2 1 نمایش پسوندی و پیشوندی -1 میانوندی ' fix ' in در دنیای جبر و منطق اعمال ریاضی رابه دو فورم نمایش می دهیم: -2 لهستانی ' fix 'Post پیشوندی لهستانی خود شامل دو بخش می باشد پسوندی در مدل لهستانی اولویت عملگر ها هیچ گونه معنا و مفهومی ندارد. مدل لهستانی تنها شامل عملیات و عملوند ها می باشد.) نیاز به پرانتز گذاری ندارند. ) 38

نماد گذاری لهستانی: : Infix عملگر بین دو عملوند عملگر بعد از دو عملوند عملگر قبل از دو عملوند : Postfix : Prefix عبارت زیر را به پسوندی و پیشوندی تبدیل کنید. ( A B / ( C * D ^ E ) ) : Post fix پسوندی: در این روش ابتدا پرانتز داخل را در نظر می گیریم. )دارای دو عالمت * و ^ می باشد( D E ^ C D E ^ * اولویت ^ باالتر است. حال عبارت قبلی را با عملوند بعد در نظر می گیریم. در پرانتز بعد دارای دو عالمت و در آخر با درنظر گرفتن عملگر - و / می باشیم.با در نظر گرفتن تقسیم : / * ^ E B C D عبارت - / * ^ E A B C D حاصل می شود. A B / C * D ^ E : pre fix در pre fix با توجه به اینکه in fix ما پرانتز دار است الزم است عبارت را پرانتز گذاری کنیم. گام 1 در پرانتز داخل ذارای دو عالمت ^ و * هستیم. با توجه به اینکه اولویت ^ باال تر است فلذا ^ را در نظر می گیریم. ^ D E گام 2 حال عبارت بعد را در نظر می گیریم.عبارت را نوشته و عملگر قبل از آن قرار می گیرد. * C ^ D E گام 3 - حال B تقسیم بر یک عبارت می شود. / B * C ^ D E در آخر A منهای کل عبارت قبل می شود. - A / B * C ^ D E همواره آخرین عالمت در Post fix و In fix یکسان خواهد بود. 39

عبارت Post fix زیر را به میانوندی ( fix ) in و پیشوندی ( fix ) pre تبدیل کنید. A b c + * d e / - : ' in fix ' به ' Post fix ' روش حل: هر گاه حروف بود درون پشته قرار می گیرد. a و b و c در پشته قرار می گیرد. زمانی که به یک عالمت برسیم دو مقدار از باالی پشته برداشته شده و عالمت ما بین دو مقدار قرار می گیرد. در مرحله بعد به ضرب می رسیم.مانند مرحله فوق ما بین دو مقدار قرار می گیرد. و دو مقدار وارد پشته می شود. دو مقدار از باالی پشته برداشته شده و عالمت دو حرف d و e وارد پشته می شوند. حال به عملگر / می رسیم.مانند مراحل فوق دو مقدار از باالی پشته برداشته شده و عالمت ما بین دو مقدار قرار می گیرد. و دو مقدار وارد پشته می شود. در ادامه به عملگر می رسیم و طبق مراحل فوق عمل می کنیم. 41

: ' pre fix ' به ' Post fix ' در این حالت عملگر ها قبل از عملوند ها قرار می گیرند. عبارت پسوندی زیر را به پیشوندی تبدیل کنید. A b c + * d e / - گام 1- از سمت چپ به ترتیب حروف )عملوندها( را در پشته قرار می دهیم. گام 2 زمانی که به عملگری برسیم دو عبارت از پشته خارج کرده و عملگر بین دو عبارت قرار می گیرد. گام 3- حال به عملگر ضرب می رسیم. دو عبارت باالی پشته را خارج کرده و عملگر بین دو عبارت قرار می گیرد. گام 4 حال d و e وارد پشته می شوند. گام - 5 حال به عملگر تقسیم می رسیم. دو عبارت باالی پشته را خارج کرده و عملگر بین دو عبارت قرار می گیرد. گام 1 - در آخر عملگر منها وارد شده و مانند مراحل فوق عمل می کنیم. 41

در تبدیل عبارت پسوندی به پیشوندی یا پسوندی به میانوندی یا... همواره جای عملگرها ثابت است. بیشتر بدانید...! اگر می خواهیم یک عبارت pre fix را به post fix یا in fix تبدیل کنیم و از "پشته "برای ذخیره سازی عبارت استفاده کنیم از سمت راست پیمایش را شروع می کنیم. عبارت پیشوندی ' fix ' pre را به پسوندی ' fix ' post تبدیل کنید. + + a / b c d / - a b - + c * d 5 / a b c روش حل: گام : 1 عبارت ها را از سمت راست وارد پشته می کنیم. گام : 2 به عالمت )عملگر( که رسیدیم دو عبارت را از پشته خارج کرده و عالمت را قبل از آن قرار می دهیم. حال a وارد پشته می شود. حال به یک عالمت می رسیم.) هرگاه به عالمتی می رسیم دو عبارت از پشته خارج شده و عالمت بعد از آن قرار می گیرد. (عدد 5 و d وارد پشته می شوند. حال به عملگر * می رسیم. دو عبارت از پشته خارج شده و عالمت بعد از آن قرار می گیرد. حال c وارد پشته می شود. 42

به عملگر + می رسیم. دو عبارت از پشته خارج شده و عالمت بعد از آن قرار می گیرد. Post fixed : c d 5 * + a b c - / - صف Queue صف لیستی است مرتب که عناصر از یک سمت آن به نام ته صف ) rear ( به آن وارد و از جلوی صف ) front ( خارج می شوند. صف را لیست ) First In First Out ( FIFO یا ) Out LIFOمی (Last In First نامند. آرایه : ساختمان داده ای از نوع استاتیک می باشد.)دارای ابتدا و انتها ) صف Queue لیست پیوندی : می توان همواره مقداری را به آن افزود. شبه کد یا الگوریتم پیاده سازی صف : Q ( n ) F, r = 0 n دامنه صف 0= r,f خالی بودن صف If Q=R Q is empty پر کردن صف خواندن صف If R=N Q is full 43

شبه کد اضافه کردن به صف : Add q (x) { If R==n A is full Else q [++r]=x ; } اگر F و R به n برسند صف پر است. ساختمان داده های حذف کردن از صف مشکل صف خطی این است که آرایه فقط یکبار قابل استفاده است.یعنی ممکن است آرایه جایی خالی داشته باشد اما صف پر اعالم شود. برای رفع این مشکل از صف حلقوی استفاده می کنیم. Del q ( ) { If f==n Q is empty; Else Return q [ ++F ]; } ساختمان داده های صف حلقوی Q( n ) { F, r = 0 n F=r=0 If f=r Q is empty If f= (r+1) mod n Q is full } 44

Add q R ( x ) { اضافه کردن به صف آرایه If f = ( r+1 ) mod n Q is full Else { R = ( r + 1) mod n QR [R]=x ; } } حذف کردن از صف حلقوی Del QR ( ) { If F = R q is empty Else { F = ( f + 1 ) mod n Return QR [ F ] } } تعداد عناصر در صف معمولی از فرمول زیر محاسبه میشود: R F تعداد خانه های پر مثال : 45

تعداد عناصر در صف حلقوی : If f R R F If f > R n ( f r ) فرض کنید یک صف حلقوی صد عنصری موجود باشد. اگر 1=R و 100=F باشد تعداد عناصر موجود در صف را مشخص کنید. F= 100 R=1 ) R n ( F فرمول 100 (100-1) = 1 ساختارکلی LINK LIST در حافظه برای ذخیره سازی داده ها می توان از آرایه و لیست پیوندی استفتده کرد. لیست پیوندی بر خالف آرایه یک ساختار غیر خطی دارد. به این معنا که عناصر لیست پیوندی می توانند در هر مکانی در حافظه کامپیوتر قرار گیرند و لزوما مانند آرایه پشت سر هم نمی باشد.)با استفاده از اشاره گر به هم اشاره می کنند.( لینک لیست ها از نوع ساختمان داده های داینامیک بوده و فاقد محدودیت می باشند. ( محل قرار گیری آدرس خانه بعد در حافظه ) با افزودن یک مسیر دیگر مدار یک طرفه خواهد شد. 46

اضافه کردن به انتهای لیست : دلیل Dynamic بودن لیست پیوندی: هرگاه در آرایه خانه ها بصورت متوالی نباشند نمی توان مقداری را در آرایه درج کرد. اما در link list یک مکان از حافظه را در نظر گرفته و به آدرس خانه مد نظر در آرایه ارجاع می دهد. فصل سوم : درخت ' tree ' درخت یک حالت خاص از یک گراف می باشد. درخت یک لیست متناهی است که دارای تعدادی گره ' node ' و یال یا ' Age ' می باشهد کهه همه به ریشه ( گره والد ) متصل هستند. سطح اول سطح دوم هم نیا سطح سوم بههرگ با توجه به اینکه باال ترین درجه درخت فوق 4 است فلذا این درخت چهارتایی است. برگ :گره های آخر یک درخت را که فاقد فرزند هستند برگ می نامند. درجه گره : تعداد فرزندان یک گره را درجه گره گویند. درجه درخت : بزرگ ترین درجه فرزندان یک درخت را گویند. 47

هم زاد یا هم نیا : فرزندان یک گره را گویند. مسیر : دنباله ای از یال های متوالی یک گره که ما را به گره مقصد هدایت کند. درخت متوازن : درختی است که اختالف سطح برگ های آن حداکثر یک است. متوازن نیست متوازن است : متوازن کامال درخت درختی است که اختالف سطح برگ های آن صفر است. درخت k تایی : باشد. درختی است که درجه گره های آن کوچکتر یا مساوی k )درجه گره درخت( درخت مرتب : درختی است که برگ ها آن از چپ به راست قرار گرفته باشند. غیر مرتب مرتب درخت دودویی : درخت مرتبی است که درجه گره های آن کوچکتر یا مساوی دو باشد. به بیان دیگر حد اکثر تعداد یال های هر گره آن دو می باشد. درخت دودویی پر : دارای دو فرزند باشند و کامال متوازن باشد. درخت دودویی مرتبی است که بجز برگ های آن تمام گره ها دقیقا 48

درخت توسعه یافته یا محض ' tree ': two های آن بجز برگ ها دقیقا دو باشد. srmphp.blog.ir درخت دودویی است که درجه کلیه گره یک درخت پر می تواند محض باشد. درخت دودویی کامل : درخت دودویی است به عمق k که تا سطح 1-k پر است.و گره های موجود در سطح kام آن از چپ به راست قرار گرفته باشد. تعداد یال های یک درخت همواره یکی کمتر از گره ها می باشد. گره یک یال حد اکثر تعداد گره ها برای ایجاد یک درخت یک است و برای ایجاد یک درخت دودویی صفر است.. n - n 1 k تعداد برگ ها در یک درخت k تایی کامل با n گره برابر است با تعداد گره های یک درخت سه تایی که تعداد سطح های آن 11 است چقدر است 10-10 1 3 = 10-9 3 = 7 در یک درخت دودویی همواره تعداد برگ ها یک واحد بیشتر از تعداد گره های درجه دو است. برگ 49

2 i حد اکثر تعداد گره ها در سطح i ام یک درخت دودویی برابر است با : 1 - مثال: 2 k حد اکثر تعداد گره ها در یک درخت دودویی در عمق k برابر است با : 1 - عمق 0 عمق 1 عمق 2 حد اکثر تعداد گره ها در عمق چهارم چقدر است 2 4-1 =15 عمق یک درخت " دودویی پر "با n گره برابر است با : log 2 (15 + 1) = 4 log 2 (n + 1) فرمول تعداد برگ ها در یک درخت دودویی کامل برابر است با : N n 1 2 51

پیاده سازی درخت درخت به دو صورت قابل پیاده سازی است : 1- آرایه 2- لیست پیوندی 1- آرایه برای درخت هایی که دارای گره زیاد) پر یا کامل (هستند آرایه مناسب خواهد بود.چرا که تعداد خانه های خالی موجود درآرایه کمتر است. فلذا ایجاد یک درخت کامل با استفاده از آرایه اگر درخت پر یا کامل باشد مناسب است. اما اگر از نوع دیگر درخت مثال : اوریب به راست باشد مقرون و به صرفه نخواهد بود. برای قرار دادن درخت فوق در آرایه الزم است برای هر گره ' NOD ' آن یک عدد در نظر گرفت. اریب درخت درخت اریب به چپ زیر را در نظر بگیرید. 51

برای رسم آرایه این درخت الزم است به تعداد یک درخت کامل و پر برای این درخت خانه در نظر گرفت. با توجه به مثال فوق می توان نتیجه گرفت در درخت اریب استفاده از آرایه مقرون و به صرفه نمی باشد. پیمایش درخت : سطحی ' BFS ' درخت به دو حالت پیمایش می شود عمقی ' DFS ' پیمایش سطحی توسط یک صف صورت می گیرد. و پیمایش عمقی توسط یک پشته پیاده سازی خواهد شد. پیمایش سطحی ' BFS ' : A B C D E F G H I J سطحی 52

LVR -1 پیمایش عمقی ' DFS ' میانوندی VLR پیمایش عمقی خود به سه حالت انجام می شود: 2- پیشوندی پسوندی LRV 3-1 میانوندی LVR از آنجایی که درخت ها بصورت بازگشتی عمل می کنند در هر مرحله تا یک گام قبل را در نظر می گیریم. در ابتدا ریشه A را در نظر گرفته که دارای دو فرزند B و C می باشد. فرزند سممت چپ را در نظر می گیریم. حال B خود دارای دو فرزند D و E می باشد. فرزند سممت چپ را در نظر می گیریم. D نیز خود دارای دو فرزند I و H می باشد. آخرین فرزند سمت چپ را به خروجی انتقال می دهیم. H حال ریشه را در نظر می گیریم. H D حال فرزند سمت چپ را در نظر می گیریم. H D I زمانی که به انتها رسیدیم به گره والد رفته و سمت راست والد را در نظر می گیریم. H D I B حال سمت راست گره B را در نظر گرفته و آن را تا انتها پیمایش می کنیم. H D I B J از آنجایی که J هیچ فرزندی ندارد به والد آن باز می گردیم. H D I B J E از آنجایی که گره B از قبل خوانده شده است به والد آن باز می گردیم. H D I B J E A حال سمت راست را در نظر می گیریم. )گره C خود ریشه می باشد.( سمت چپ گره ریشه F بوده که هیچ فرزندی ندارد فلذا خود به خروجی انتقال می یابد. H D I B J E A F حال به والد رفته و آن را به خروجی ارسال می کنیم. 53

H D I B J E A F C و در آخر گره سمت راست به خروجی ارسال می شود. H D I B J E A F C G -2 پیشوندی VLR در VLR اولویت با ریشه است.)اول ریشه خوانده می شود.( A خوانده می شود.از آنجایی که A خود ریشه است به خروجی می رود. A حال برسی می شود آیا A فرزند چپ دارد بله B آیا ریشه است بله. فلذا به خروجی می رود. A B مجددا مراحل فوق برسی می شوند A B D طبق شرط فوق : A B D H حال سمت راست درخت در نظر گرفته می شود. A B D H I از آنجایی که Iفرزند دیگری ندارد به ریشه قبل از خود می رود. حال والد ( نظر گرفته و سمت راست را پیمایش می کنیم. A B D H I E E خود دارای یک فرزند می باشد. A B D H I E J حال به والد کل بازگشته و سمت راست را پیمایش می کنیم. A B D H I E J C ) را در C دارای دو فرزند می باشد.)اولویت با فرزند سمت چپ می باشد( A B D H I E J C F 54

و در آخر A B D H I E J C F G -3 پسوندی LRV در ابتدا A را در نظر می گیریم. A خود دارای چند ریشه می باشد.)ریشه سمت چپ را پیمایش می کنیم تا به آخرین ریشه سمت چپ که هیچ فرزندی ندارد برسیم.( H به خروجی می رود. H به ریشه قبل خود بازگشته و سمت راست را پیمایش می کند. H I حال ریشه را چاپ می کند. H I D از گره Dبه والد خود بازگشته و سمت راست را پیمایش می کند. حال به گره E رسیده ایم. گره E خود دارای فرزند می باشد.فرزند ) J ( E را چاپ می کند. H I D J حال ریشه را چاپ می کند. H I D J E به ریشه قبل باز گشته و B را چاپ می کند. H I D J E B حال سمت راست گراف را پیمایش می کنیم.گره C خود دارای دو فرزند می باشد که فرزند سمت چپ را در نظر می گیریم. H I D J E B F حال به ریشه بازگشته و سمت راست را پیمایش می کنیم. H I D J E B F G به ریشه قبل باز گشته و C را چاپ می کند. H I D J E B F G C و در آخر والد کل را چاپ می کنیم 55

H I D J E B F G C A است. ترتیب مالقات برگ ها در هر سه الگوریتم میانوندی پیشوندی و پسوندی یکسان درخت Parse درخت Parse در کامپایلرها مورد استفاده قرار می گیرد.) برای عبارات ریاضی و سینتکس های برنامه نویسی ) مدل ریاضی: میانوندی : C A * B + برای رسم یک درخت به دو پیمایش که حد اقل یکی از آن ها میانوندی باشد نیاز است. اگر LRV باشد : پیمایش اگر VLR باشد : پیمایش صورت می گیرد. صورت می گیرد. مثال : LVR : h d i b j e a f c g VLR : a b d h i e j c f g اولین ورودی در ' a ' vlr می باشد.)نکته : همیشه در VLR اولین ورودی ریشه است و در LRV آخرین ریشه( هر چه در سمت راست گره باشد در یک گره و هر چه در سمت چپ باشد در یک گره دیگر قرار می گیرد. حال حرف b را در نظر می گیریم و طبق گره فوق عمل می کنیم. 56

درخت زیر را در نظر گرفته و پیمایش میانوندی ' inorder ' آن را بنویسید. در ابتدا درخت آرایه فوق را رسم می کنیم. حال گره های اضافه را حذف می کنیم. LVR : X P Y T Z 57

پیمایش پسوندی درخت زیر را بنویسید. درخت عمومی دارای درجه ثابت و معینی نمی باشد. تبدیل درخت عمومی به درخت دودویی روش اول : فرزند چپ برادر راست گهام : 1 کلیه ی گره های همزاد را به یکدیگر وصل می کنیم. گهام : 2 ارتباط تمامی گره ها به پدرشان را به جزء گره سمت چپ را قطع می کنیم. 58

فصل چهارم : گراف مختصری از تعاریف گراف : گراف : مجموعه ای از روس ها و یال ها که هم دارای جهت هستند و هم بدون جهت.که در برخی گراف ها یال ها دارای وزن هستند. يک گراف شامل دو مجموعه است مجموعه غیر تهی از گره ها يا رئوس )vertex( و مجموعه ای از يال ها )edge( که راس ها را به هم متصل می کنند. مثال: می توان شهر های يک کشور را رئوس و جاده های بین آن ها را يال های يک گراف تصور کرد. به هر راس يا هر يال گراف نامی اختصاص داده می شود. : node یال : به مسیر ارتباطی بین دو گره یال گفته می شود. nod یال گراف جهت دار : اگر یال های گراف جهتی داشته باشند گراف جهت دار است. گراف بدون جهت : اگر یال های گراف جهتی نداشته باشند گراف بدون جهت است. 59

گراف وزن دار :گرافی است که روی هر یال آن عدد یا عالمتی باشد که نشان دهنده ی وزن آن یال است. گراف کامل : گرافی است که بدون درنظر گرفتن جهت بین هر دو گره یک یال وجود داشته باشد. درجه گراف جهت دار: درجه ی راس یک گراف جهت دار یال های ورودی و خروجی به آن راس هستند. درجه گراف بدون جهت : درجه ی راس های یک گراف در یک گراف بدون جهت برابر است با تعداد یال هایی که از آن راس می گذرد. گراف تهی : گرافی که فقط راس یا nod داشته باشد گراف تهی " { } " یا " Ø " می باشد. مسیر در یک گراف : در یک گراف مسیر وجود دارد اگر و فقط اگر از هر راس به راس دیگر حداقل یک راه وجود داشته باشد. مدار : یک گراف بصورت یک مدار تصور می شود اگر و فقط اگر پیمایش را از یک راس آغاز و پس از طی مسیری دوباره به راس آغازین باز گردیم. گراف همبند جهت دار : گرافی است که با حذف جهت های آن یک گراف هم بند بدون جهت بوجود می آید. گراف همبند بدون جهت: گرافی است که بین هر دو راس آن مسیر وجود داشته باشد. گراف همبند قوی :گرافی است که به ازای هر دو راس دلخواه مثل A و B هم مسیر از A به B موجود باشد هم B به. A گراف مکمل : برای یافتن مکمل گراف G یال های G را حدف کرده و یال هایی که در گراف کامل هستند را رسم می کنیم. 61

گراف k تایی : گرافی که بین هر دو راس بیش از یک یال باشد گراف چند گانه نامیده می شود. مدار اویلری : مداری است که از هر یال یک و فقط یکبار عبور کند و به خود باز گردد. مسیر اویلری : مسیری است که از هر یال یک و فقط یکبار عبور کند. )غیر بازگشتی( مدار هامیلتونی : مداری است که از هر یال یک و فقط یکبار عبور کند و به خود باز گردد. مسیر هامیلتونی : مسیری است که از هر گره یک گراف یک و فقط یک بار عبور کند. حلقه : مسیری که راس اول و آخر آن یکی باشد. درجه هر گره: تعداد یال های ورودی یا خروجی از هر گره را گویند. Deg ( A ) = 3 Deg ( D ) = 1 پیمایش گراف -1 سطحی 'BFS' گراف ها به دو صورت پیمایش می شوند -2 عمقی 'DFS' الزم به ذکر است اگر در پیمایش گراف نقطه شروع تعیین نشده باشد اولویت با گره ای است که کوچکترین اسم را دارد. سطحی ' BFS ' اگر گراف زیر را داشته باشیم برای پیمایش یک گراف به روش سطحی بصورت زیر عمل می کنیم هر گره که در نظر گرفته می شود تمامی فرزندان آن گره نوشته می شوند. 61

گام 1: در این نوع پیمایش اولین گره )گره شروع( ' a ' را در نظر گرفته و تمامی ارتباطات گره a را می نویسیم. گام 2: حال گره b را در نظر گرفته و تمامی ارتباطات آن را می نویسیم. گام 3 :حال گره e را در نظر می گیریم. ( از گره هایی که از قبل خوانده شده اند صرفه نظر می کنیم ) گام : 4 حال به f می رسیم. از آنجایی که تمامی مسیر های موجود از f قبل نوشته شده اند از آن صرفه نظر می کنیم. به مابقی گره ها از گام : 5 حال به c می رسیم. از آنجایی که تمامی مسیر های موجود از c به مابقی گره ها از قبل نوشته شده اند از آن صرفه نظر می کنیم. گام : 1 حال به d می رسیم. از آنجایی که تمامی مسیر های موجود از d به مابقی گره ها از قبل نوشته شده اند از آن صرفه نظر می کنیم. گام : 7 گره g با e و h در ارتباط است.از آنجایی که گره e از قبل ذکر شده از آن صرفه نظر کرده و h را در نظر می گیریم. درخت پوشای سطحی ' BFS ' سطحی : a b e f c d g i h 62

عمقی ' DFS ' گام : 1 در این نوع پیمایش اولین گره )گره شروع( را در نظر گرفته و آن گره را تا عمق )انتها( پیمایش می کنیم.) اولویت با ارتباط کوچکتر می باشد.( گام 2 :گره b با c و d و e در ارتباط است.در اینجا گره c را در نظر می گیریم. گام : 3 گره c با گره g در ارتباط است. گام : 4 گره g با e و h در ارتباط است.بر اساس تعاریف فوق گره e را در نظر می گیریم. گام 5 :گره e با گره های a و b و f و g و I در ارتباط است ولی از آنجایی که گره های a و b و c و g و d از قبل پیمایش شده اند و f از i کوچکتر است f را در نظر می گیریم. 63

گام 1 - گره f با a در ارتباط است ولی از آنجایی که از قبل پیمایش شده است از آن صرفه نظر می کنیم. گام 7- حال گره i را در نظر می گیریم. گام ۸ - گره i با f و e و h در ارتباط است.از آنجایی که e و f از قبل پیمایش شده اند h را در نظر می گیریم. درخت پوشای عمقی درخت پوشا درختی است که کلیه ی گره های رئوس گراف را با حد اقل یال ممکن در بر گیرد. درخت پوشای حداقل ' minimum ' درخت پوشایی است که مجموع وزن یال های آن حداقل باشد. 1- راشال )راسل کروسال کروشال( الگوریتم -2 پریم ' Prim ' 1- راشال در این روش در هر مرحله یالی که کمترین هزینه را دارد انتخاب نموده و درصورتی که باعث بوجود آمدن حلقه نشود آن را رسم می کنیم. 64

این عمل را تا بدست آمدن یک درخت پوشا ادامه می دهیم. گام 1 : در این مرحله از راس 1 به راس 5 می رویم با هزینه ی 11. گام : 2 در این مرحله کمترین هزینه موجود در گراف 12 بوده که از ارتباط راس 2 به 3 بوجود آمده است. گام : 3 کمترین هزینه بعد 14 بوده که از پیمایش یال 1 به 1 بوجود آمده است. گام 4 : کمترین هزینه بعد 11 بوده که از پیمایش یال 1 به 2 بوجود آمده است. از یال 1 به 3 صرفه نظر می کنیم. ( باعث ایجاد حلقه می شود. ) گام 5 : کمترین هزینه بعد 22 بوده که از پیمایش یال 3 به 4 بوجود آمده است. گام : 1 کمترین هزینه بعد 25 بوده که از پیمایش یال 4 به 5 بوجود آمده است. 65

از یال 1 به 0 صرفه نظر می کنیم. ( باعث ایجاد حلقه می شود. ) از یال 1 به 4 صرفه نظر می کنیم. ( باعث ایجاد حلقه می شود. ) مرتبهاجرایی الگوریتم راشال : ) e o ( e log 2- پریم در این روش با شروع از یک گره دلخواه ابتدا آن گره و سپس نزدیکترین گره مجاور آن را انتخاب می کنیم. حال نزدیک ترین گره را به یکی از دو گره مالقات شده انتخاب می کنیم. به همین ترتیب ادامه می دهیم تا درخت پوشا به وجود آید. از یالی که باعث ایجاد حلقه شود صرفه نظر می کنیم. مرتبهاجرایی الگوریتم o ( n 2 ) : preem درخت پوشای شکل زیر را رسم کنید. گام : 1 راس شروع )0) را در نظر می گیریم. از زاس صفر کوچکترین یال موجود 10 می باشد. 66

گام 2 :حال راس های 0 و 5 را در نظر می گیریم. در اینجا کوچکترین یال 25 است. گام : 3 حال از بین راس های 5 و 0 و 4 کوچکترین یال را در نظر می گیریم.)یال های ارتباطی 22 و 26 و ) 28 هستند. گام : 4 حال از بین راس های 0 و 5 و 4 و 3 کوچکترین یال را انتخاب می کنیم. گام : 5 حال از بین راس های 0 و 5 و 4 و 3 و 2 کوچکترین یال را انتخاب می کنیم. گام : 1 حال از بین راس های 0 و 5 و 4 و 3 و 2 و 1 کوچکترین یال را انتخاب می کنیم. 67

فصل پنجم : مرتب سازی در بحث مرتب سازی ابتدا الزم است الگوریتم های جستجو را برسی کنیم. 1- خطی ( آرایه نا مرتب ) 2- دودویی ( آرایه مرتب ) الگوریتم های جستجو خود شامل دو بخش می باشند 1- خطی در این روش خانه های آرایه را یک به یک برسی می کنیم تا به مقدار مدنظر برسیم. تنها مزیت این روش این است که الزامی بر مرتب بودن آرایه ندارد. 2- دودویی فرض کنید دارای یک آرایه ی n مرتب شود. تایی دودویی هستیم.برای جستجو در این آرایه ابتدا الزم است آرایه برای این کار الزم است آرایه دا به دو قسمت مساوی تقسیم کنیم.... n 2 n 1 2 حال برسی می شود مقدار مد نظر در سمت راست آرایه قرار دارد یا در سمت چپ. با فرض بر اینکه مقدار مد نظر در سمت چپ آرایه قرار دارد مجددا سمت چپ را به دو قسمت تقسیم می کنیم. حال طبق مرحله فوق برسی می شود تا زمانی که به خانه مد نظر برسیم. اگر مقدار مدنظر یافت نشود یعنی چنین مقداری در آرایه ثبت نشده است. مرتبه اجرایی این الگوریتم ( دودویی ) ( n o ( log می باشد. 68

مرتب سازی الگوریتم های مرتب سازی خود شامل چندین بخش می باشند 1- مرتب سازی حبابی در این نوع الگوریتم مقدار اول را در نظر گرفته و آن را با تک تک خانه های آرایه مقایسه می کنیم تا محل اصلی درج آن یافت شود. نتیجهههههههه در مرتب سازی حبابی هر مقداری که در نظر گرفته شود با تمام مقادیر چک می شود.سپس مقدار بعد را انتخاب می کند. از آنجایی که برای انجام این عمل دو حلقه ی for الزم است فلذا مرتبه اجرایی این الگوریتم ) 2 o ( n می باشد. مرتب سازی ' Sort ' Insertion درجی -2 یک الگوریتم مرتبسازی ساده بر مبنای مقایسه است. این الگوریتم برای تعداد دادههای زیاد کارآمد نیست. در این الگوریتم هر مقداری که انتخاب شود در محل اصلی خود درج می شود. مثال : لیست زیر را از طریق مرتب سازی درجی مرتب کنید. 20, 12, 10, 23, 40 گام 1 در مرحله اول 21 را در نظر می گیرد. 20 گام 2- در مرحله دوم 21 را با عدد 12 در نظر می گیرد. 20 12 گام 3- در مرحله سوم عدد بعد را با لیست مرتب شده قبل در نظر می گیرد. 10 12 20 69

گام 4 - در مرحله چهارم مقدار 23 گام srmphp.blog.ir را درج می کند.) در این مرحله جا به جایی صورت نمی گیرد. ) 10 12 20 23 5- در مرحله آخر همه اعداد را در نظر می گیریم. 10 12 20 23 40 مرتب سازی درجی در بهترین حالت دارای مرتبه اجرایی ) n o ( و در بد ترین حالت) o ( n 2 خواهد بود. -3 مرتب سازی سریع ' Sort ' Quick در این نوع مرتب سازی ابتدا الزم است یک لوال انتخاب کنیم. همیشه مقدار اول به عنوان لوال در نظر گرفته می شود سپس هر چه از لوال کوچکتر باشد سمت چپ و هر چه از لوال بزرگتر باشد سمت راست قرار می گیرد. 20 12 40 23 10 Lola 12 10 20 40 23 Lola Lola 10 12 20 40 23 Lola Lola Lola 10 12 20 23 40 Lola Lola Lola Lola هر مقداری که به عنوان لوال در نظر گرفته شود دیگر تغییر مکان نخواهد داد. مرتب سازی سریع دارای مرتبه اجرایی متوسط می باشد. n 2 برای بدترین حالت و n log n برای بهترین حالت و حالت 4 -مرتب سازی ' Sort ' merge ادغامی در این نوع مرتب سازی هر بار دو مقدار را در نظر می گیریم. ( دودویی ) 20 12 40 23 10 9 31 12 20 23 40 9 10 31 مرتب سازی ادغامی در همه حاالت دارای مرتبه اجرایی( o ( n log n می باشد. 71

9 10 12 20 23 31 40 5 -مرتب سازی ' Sort ' Tree درختی در این نوع مرتب سازی هر بار هر خانه را به عنوان ریشه در نظر گرفته و مقادیر بعد اگر بزرگتر از مقدار ریشه باشد سمت راست و در غیر این صورت سمت چپ ریشه قرار می گیرند. 20, 12, 40, 23, 10, 14 گام 21 : 1 را به عنوان ریشه در نظر می گیرد. گام : 2 از آنجایی که 12 از 21 کوچکتر است سمت چپ ریشه قرار می گیرد. گام 3: حال عدد 41 را در نظر می گیریم 41 از ریشه بزرگتر است فلذا سمت راست قرار می گیرد. گام 4 :حال عدد 23 را در نظر می گیریم 23 از ریشه بزرگتر است ( سمت راست قرار می گیرد( اما از آنجایی که از 41 کوچکتر است سمت چپ 41 قرار می گیرد. گام : 5 حال عدد 11 را در نظر می گیریم 11 از ریشه کوچکتر است ( سمت چپ قرار می گیرد( از آنجایی که از 12 نیز کوچکتر است سمت چپ قرار می گیرد. 71

گام : 1 در آخر عدد 14 را در نظر گرفته و طبق مراحل فوق عمل می کنیم. پیمایش میانوندی ' LVR ' درخت فوق به شکل زیر خواهد بود LVR : 10, 12, 14, 20, 23, 40 1 -مرتب سازی مبنایی ' Sort ' Radix 20, 12, 40, 23, 10, 14 در این نوع مرتب سازی ابتدا الزم است مبنای اعداد را در نظر بگیریم. )بزرگ ترین رقم موجود در اعداد مبنا محسوب می شود. ) به تعداد مبنا سطر در نظر گرفته می شود. گام 1 : اعداد را بر اساس یکان مرتب می کنیم. گام 2 : اعداد را بر اساس دهگان مرتب می کنیم. [0]: 20, 40, 10 [1]: [2]: 12 [3]: 23 [4]: 14 [0]: 20, 40, 10 [1]: 10, 12, 14 [2]: 12 20, 23 [3]: 23 72

[4]: 40 10, 12, 14, 20, 23, 40 حال همه را بصورت پیمایش سطری چاپ می کند. 73